#ifndef UTILIZADOR_H_
#define UTILIZADOR_H_

#include <string>
#include <vector>
#include <iostream>

class Cidade;
class Lugar;

class Utilizador {
	friend std::ostream& operator<<(std::ostream& output, const Utilizador& utilizador);
private:
	std::string nickname;
	std::string email;
	std::vector<Utilizador*> pedidos_amizade;
	std::vector<Cidade*> check_ins;
	Lugar* local;

public:
	Utilizador();
	Utilizador(const std::string nickname);
	Utilizador(const std::string nickname, const std::string email);
	Utilizador(const std::string nickname, const std::string email, Lugar* local);
	virtual ~Utilizador();

	std::string get_nickname() const;
	std::string get_email() const;
	Lugar* get_local() const;
	std::vector<Cidade*> get_check_ins() const;
	int get_pontos_totais() const;
	int get_pontos(const std::string& nome_lugar) const;
	int get_numero_pedidos_amizade() const;
	void enviar_pedido_amizade(Utilizador* utilizador);
	bool remover_pedido_amizade(Utilizador* utilizador);
	bool check_in(Lugar* lugar);

	const Utilizador& operator =(const Utilizador& user);
	bool operator ==(const Utilizador& user) const;
	bool operator >(const Utilizador& user) const;
};

#endif /* UTILIZADOR_H_ */
